# -*- coding: latin-1 -*-
import sys,  time
from PyQt4.QtGui import QTableView,  QDialog,  QMessageBox
from PyQt4.QtSql import QSqlQuery
from PyQt4.QtCore import QVariant,  SIGNAL

sys.path.append("../")

from vista.sinopsis_vista import Ui_FormSinopsis
from modelo.sinopsis_modelo import sinopsis_modelo
from modelo.hclinica_modelo import hclinica_modelo
from modelo.debe_modelo import debe_modelo
from modelo.haber_modelo import haber_modelo
from validacion import validacion

DEBUG = False

class sinopsis_controlador(Ui_FormSinopsis):
    def __init__(self, idAnimal,idHclinica, labelSaldo):
        self.widget = QDialog()
        self.setupUi(self.widget)
        # Connections
        self.widget.connect(self.pushButtonBorrar, SIGNAL("clicked()"),
                            self.bajaRegistro)
        self.widget.connect(self.pushButtonAgregar, SIGNAL("clicked()"),
                            self.altaRegistro)
        self.widget.connect(self.tableViewSinopsis, SIGNAL("clicked(QModelIndex)"), self.activarModificaciones)
        self.widget.connect(self.pushButtonCambiar, SIGNAL("clicked()"),
                            self.guardarCambios)
        self.widget.connect(self.tableViewSinopsis, SIGNAL("doubleClicked(QModelIndex)"), self.desactivarModificaciones)
       
        # Obtengo datos 
        
        self.labelSaldo= labelSaldo
        self.idHclinica=idHclinica
        self.idAnimal = idAnimal
        self.idDuenio = self.obtenerDuenio(self.idAnimal)
        # cargo los datos en la tabla
        self.sinopsis=sinopsis_modelo()
        self.sinopsis.listarRegistros(self.idHclinica)
        self.tableViewSinopsis.setModel(self.sinopsis.model)
        self.tableViewSinopsis.setColumnHidden(self.sinopsis.ID, True)
        self.tableViewSinopsis.setColumnHidden(self.sinopsis.idHclinica, True)
        self.ajustarDatosTabla()
        self.desactivarModificaciones()
    
  
    def ajustarDatosTabla(self):
        self.tableViewSinopsis.resizeColumnsToContents()
        self.tableViewSinopsis.setHorizontalHeader(self.tableViewSinopsis.horizontalHeader().setStretchLastSection(True))
    
    def activarModificaciones(self):
        self.groupBoxDescripcion.setEnabled(True) 
        seleccionado=self.tableViewSinopsis.selectedIndexes()[0]  
        record=self.sinopsis.model.record(seleccionado.row())
        self.textEditDescripcion2.setText(record.value("descripcion").toString())
        self.lineEditcosto.setText(record.value("costotratamiento").toString())
        self.pushButtonAgregar.setEnabled(False)
        self.pushButtonBorrar.setEnabled(True)
        self.pushButtonCambiar.setEnabled(True)
        
    def desactivarModificaciones(self):
        self.groupBoxDescripcion.setEnabled(False) 
        self.pushButtonBorrar.setEnabled(False)
        self.pushButtonAgregar.setEnabled(True)
        self.recargarSaldo()
        
    def altaRegistro(self):
        if DEBUG: print "apreto el boton altaRegistro"
        descripcion=self.textEditDescripcion.toPlainText()
        fecha=self.calendarWidget.selectedDate()
        temperatura=self.lineEdittemperatura.text()
        costotratamiento=self.lineEditcosto.text()
        validador = validacion()
        if (validador.esTemperatura(temperatura)) and ( validador.esMoneda(costotratamiento)):
            query = QSqlQuery()
            query.prepare("INSERT INTO sinopsis (fecha,descripcion,temperatura,costotratamiento,id_hclinica)  VALUES  \
                        (:fecha, :descripcion,:temperatura,:costotratamiento, :id_hclinica)")
            query.bindValue(":fecha", QVariant(fecha)) 
            query.bindValue(":descripcion", QVariant(descripcion)) 
            query.bindValue(":temperatura", QVariant(temperatura)) 
            query.bindValue(":costotratamiento", QVariant(costotratamiento)) 
            query.bindValue(":id_hclinica", QVariant(self.idHclinica)) 
            query.exec_()
            
            # inserto un reg en el debe
            id_sinopsis =query.lastInsertId().toString()
            query.prepare("INSERT INTO debe (id_sinopsis,id_duenio,costotratamiento)  VALUES  \
                        (:id_sinopsis, :id_duenio, :costotratamiento)")
            query.bindValue(":id_sinopsis", QVariant(id_sinopsis)) 
            query.bindValue(":id_duenio", QVariant(self.idDuenio)) 
            query.bindValue(":costo_tratamiento", QVariant(costotratamiento)) 
            query.exec_()
            debe = debe_modelo()
            saldoDuenio=debe.obtenerTotal(self.idDuenio)
            if DEBUG: print "El duenio debe en total:", str(saldoDuenio)
            self.sinopsis.model.select()
            self.textEditDescripcion.setText("")
            self.ajustarDatosTabla()
            self.desactivarModificaciones()
            self.recargarSaldo()
            self.pushButtonCerrar.setFocus()
        else:
            if (not validador.esTemperatura(temperatura)):
                QMessageBox.critical(None, "Error", "La temperatura ingresada es incorrecta")        
                self.lineEdittemperatura.setFocus()
            elif (not validador.esMoneda(costotratamiento)):
                QMessageBox.critical(None, "Error", "El costo ingresado es incorrecto")        
                self.lineEditcosto.setFocus()
        
    def recargarSaldo(self):
        debeModelo = debe_modelo()
        haberModelo = haber_modelo()
        debe = debeModelo.obtenerTotal(self.idDuenio)
        haber = haberModelo.obtenerTotal(self.idDuenio)
        saldo = float(debe) - float(haber)
        if saldo > 0:
            self.labelSaldo.setText("<font style='color: red;'>"+str(saldo)+"</font>")
        else:
            self.labelSaldo.setText("<font style='color: black;'>"+str(saldo)+"</font>")

    def obtenerDuenio(self, idAnimal):
        query = QSqlQuery("select id_duenio from animal where id_animal = "+str(idAnimal))
        query.next()
        id_duenio = query.value(0).toInt()[0];
        return id_duenio
        
    def guardarCambios(self):
        seleccionado=self.tableViewSinopsis.selectedIndexes()[0]  
        record=self.sinopsis.model.record(seleccionado.row())
        idSinopsis =record.value("id_sinopsis").toInt()[0]
        descripcion=self.textEditDescripcion2.toPlainText()
        costo=self.lineEditcosto.text()
        validador = validacion()
        if (not validador.esMoneda(costo)):
            QMessageBox.critical(None, "Error", "El costo ingresado es incorrecto")        
            self.lineEditcosto.setFocus()
        else:        
            query = QSqlQuery()
            query.prepare("UPDATE sinopsis SET descripcion = :descripcion, costotratamiento = :costo  where id_sinopsis = :id_sinopsis" )
            query.bindValue(":descripcion", QVariant(descripcion)) 
            query.bindValue(":id_sinopsis", QVariant(idSinopsis))
            query.bindValue(":costo", QVariant(costo))
            query.exec_() 
            query.prepare("UPDATE debe SET costotratamiento= :costo  where id_sinopsis = :id_sinopsis" )
            query.bindValue(":id_sinopsis", QVariant(idSinopsis))
            query.bindValue(":costo", QVariant(costo)) 
            query.exec_()
            self.lineEditcosto.setText("")
            self.sinopsis.model.select()
            self.pushButtonCambiar.setEnabled(False)
            self.ajustarDatosTabla()
            self.desactivarModificaciones()
        
        
    def bajaRegistro(self):
        if DEBUG: print "apreto el boton bajaRegistro"
        seleccionado=self.tableViewSinopsis.selectedIndexes()[0]
        record = self.sinopsis.model.record(seleccionado.row())
        respuesta = QMessageBox.question(None, "Message", 
        "Esta seguro que desea borrar este registro de la Sinopsis?","No","Si","" ,  False,  True)
        if respuesta: 
            idSinopsis = record.value("id_sinopsis").toInt() [0]
            self.sinopsis.eliminarRegistro(idSinopsis)
            self.textEditDescripcion2.setText("")
            self.groupBoxDescripcion.setEnabled(False)
            self.ajustarDatosTabla()
        self.desactivarModificaciones()
        
